package bd;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JPanel;
import javax.swing.table.DefaultTableModel;

/** Classe janelaBusca
 * Essa classe é encarregada da criação da janela de busca.
 */
public class janelaBusca extends JPanel {//implements ActionListener {

    private conecta bd;
    private frame principal;
    public JPanel painel;

    /** Construtor da classe janela de busca.
     * Quando uma janela de busca precisa ser criada, esse método chama
     * o método initComponents(), que é o encarregado da criação.
     */
    public janelaBusca() {
        initComponents();
    }

    /** Método que conecta o banco à janela de busca
     */
    public janelaBusca(conecta bd, frame frame) {
        initComponents();
        this.bd = bd;
        this.principal = frame;
        this.removeTuplas.setVisible(false);
    }

    /** Método initComponents(). tem a função da criação da janela de busca,
     * criando botões, caixas de texto, etc. É o método que dá forma à janela.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        voltar = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        removeTuplas = new javax.swing.JButton();

        voltar.setText("Voltar");
        voltar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                voltarActionPerformed(evt);
            }
        });

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        removeTuplas.setText("Remover");
        removeTuplas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeTuplasActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(voltar)
                        .addGap(18, 18, 18)
                        .addComponent(removeTuplas))
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 437, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(25, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 290, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(voltar)
                    .addComponent(removeTuplas)))
        );
    }// </editor-fold>//GEN-END:initComponents

    /** Trata eventos relacionados ao botão voltar.
     */
    private void voltarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_voltarActionPerformed
        this.voltar.setText("Voltar");
        this.removeTuplas.setVisible(false);
        principal.voltar();
    }//GEN-LAST:event_voltarActionPerformed

    /** Trata eventos relacionados ao botão remover, executando a ação e
     * reconfigurando a janela.
     */
    private void removeTuplasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeTuplasActionPerformed
        principal.remover();
        this.voltar.setText("Voltar");
        this.removeTuplas.setVisible(false);
        principal.voltar();
    }//GEN-LAST:event_removeTuplasActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JButton removeTuplas;
    private javax.swing.JButton voltar;
    // End of variables declaration//GEN-END:variables

    /** Método que organiza o dado digitado num campo.
     * Usado para tratar as strings que possuem mascara, por exemplo.
     */
    void organiza(ResultSet retorno) {
        try {
            jTable1.setModel(getTableModelAlunos(retorno));
        } catch (SQLException ex) {
            Logger.getLogger(janelaBusca.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private DefaultTableModel getTableModelAlunos(ResultSet retorno) throws SQLException {
        ResultSetMetaData rsMetaData = retorno.getMetaData();
        int numberOfColumns = rsMetaData.getColumnCount();
        String[] colunas = new String[numberOfColumns];

        for (int i = 1; i <= numberOfColumns; i++) {
            colunas[i - 1] = rsMetaData.getColumnName(i);
        }
        ArrayList<String[]> linhas = new ArrayList<String[]>();

        while (retorno.next()) {
            String[] result = new String[numberOfColumns];
            for (int i = 1; i <= numberOfColumns; ++i) {
                result[i - 1] = retorno.getString(i);
            }
            linhas.add(result);
        }
        String[][] linhas2 = new String[linhas.size()][numberOfColumns];
        for (int i = 1; i <= linhas.size(); i++) {
            linhas2[i - 1] = linhas.get(i - 1);
        }

        return new DefaultTableModel(linhas2, colunas);
    }

    /** Método que seta botões como visível. Também altera o nome do botão "voltar" para "cancelar"
     */
    void mostraBotoes() {
        this.removeTuplas.setVisible(true);
        this.voltar.setText("Cancelar");
    }
}
